﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using System.Data.SqlClient;

using Padelcenter.Common;

namespace Padelcenter.DataAccess
{
    #region " SELECT "
    #region " Pedido Select "
    public class Pedido_Select : DataAccessBase
    {
        public Pedido_Select()
        {
            base.StoredProcedureName = StoredProcedure.Name.Pedido_SELECT.ToString();
        }

        public DataSet Get()
        {
            DataSet ds;

            Pedido_Select_Prm pedido_Select_Prm = new Pedido_Select_Prm(this.Pedido);
            DataBaseHelper dbhelper = new DataBaseHelper(StoredProcedureName);
            ds = dbhelper.Run(base.ConnectionString, pedido_Select_Prm.Parameters);

            return ds;
        }

        private Pedido _pedido;

        public Pedido Pedido
        {
            get { return _pedido; }
            set { _pedido = value; }
        }
    }

    public class Pedido_Select_Prm
    {
        public Pedido_Select_Prm(Pedido pedido)
        {
            this.Pedido = pedido;
            this.BuildParams();
        }

        private void BuildParams()
        {
            SqlParameter[] parameters = 
            {
                new SqlParameter( "@idPedido"       , this.Pedido.IdPedido),
                new SqlParameter( "@idUsuario"      , this.Pedido.Usuario.IdUsuario),
                new SqlParameter( "@idEstadoPedido" , this.Pedido.EstadoPedido.IdEstadoPedido),
                new SqlParameter( "@idMetodoPago"   , this.Pedido.MetodoPago.IdMetodoPago),
                new SqlParameter( "@idMetodoEnvio"  , this.Pedido.MetodoEnvio.IdMetodoEnvio),
                new SqlParameter( "@idTarjeta"      , this.Pedido.Tarjeta.IdTarjeta)
            };

            this.Parameters = parameters;
        }

        private Pedido _pedido;

        public Pedido Pedido
        {
            get { return _pedido; }
            set { _pedido = value; }
        }
        private SqlParameter[] _parameters;

        public SqlParameter[] Parameters
        {
            get { return _parameters; }
            set { _parameters = value; }
        }
    }

    #endregion

    #region " PedidoProducto Select "

    public class PedidoProducto_Select : DataAccessBase
    {
        public PedidoProducto_Select()
        {
            base.StoredProcedureName = StoredProcedure.Name.PedidoProducto_SELECT.ToString();
        }

        public DataSet Get()
        {
            DataSet ds;

            PedidoProducto_Select_Prm pedidoProducto_Select_Prm = new PedidoProducto_Select_Prm(this.PedidoProducto);
            DataBaseHelper dbhelper = new DataBaseHelper(StoredProcedureName);
            ds = dbhelper.Run(base.ConnectionString, pedidoProducto_Select_Prm.Parameters);

            return ds;
        }

        private PedidoProducto _pedidoProducto;

        public PedidoProducto PedidoProducto
        {
            get { return _pedidoProducto; }
            set { _pedidoProducto = value; }
        }
    }

    public class PedidoProducto_Select_Prm
    {
        public PedidoProducto_Select_Prm(PedidoProducto pedidoProducto)
        {
            this.PedidoProducto = pedidoProducto;
            this.BuildParams();
        }

        private void BuildParams()
        {
            SqlParameter[] parameters = 
            {
                new SqlParameter( "@idPedido"       , this.PedidoProducto.Pedido.IdPedido),
                new SqlParameter( "@idProducto"     , this.PedidoProducto.Producto.IdProducto)
                
            };

            this.Parameters = parameters;
        }

        private PedidoProducto _pedidoProducto;

        public PedidoProducto PedidoProducto
        {
            get { return _pedidoProducto; }
            set { _pedidoProducto = value; }
        }

        private SqlParameter[] _parameters;

        public SqlParameter[] Parameters
        {
            get { return _parameters; }
            set { _parameters = value; }
        }
    }

    #endregion

    #endregion

    #region " INSERT "
    #region " Pedido Insert "
    public class Pedido_Insert : DataAccessBase
    {
        public Pedido_Insert()
        {
            base.StoredProcedureName = StoredProcedure.Name.Pedido_INSERT.ToString();
        }

        public DataSet Get()
        {
            DataSet ds;

            Pedido_Insert_Prm pedido_Insert_Prm = new Pedido_Insert_Prm(this.Pedido);
            DataBaseHelper dbhelper = new DataBaseHelper(StoredProcedureName);
            ds = dbhelper.Run(base.ConnectionString, pedido_Insert_Prm.Parameters);

            return ds;
        }

        private Pedido _pedido;

        public Pedido Pedido
        {
            get { return _pedido; }
            set { _pedido = value; }
        }
    }

    public class Pedido_Insert_Prm
    {
        public Pedido_Insert_Prm(Pedido pedido)
        {
            this.Pedido = pedido;
            this.BuildParams();
        }

        private void BuildParams()
        {
            SqlParameter[] parameters = 
            {
                new SqlParameter( "@idUsuario"      , this.Pedido.Usuario.IdUsuario)
            };

            this.Parameters = parameters;
        }

        private Pedido _pedido;

        public Pedido Pedido
        {
            get { return _pedido; }
            set { _pedido = value; }
        }
        private SqlParameter[] _parameters;

        public SqlParameter[] Parameters
        {
            get { return _parameters; }
            set { _parameters = value; }
        }
    }

    #endregion

    #region " PedidoProducto Insert "

    public class PedidoProducto_Insert : DataAccessBase
    {
        public PedidoProducto_Insert()
        {
            base.StoredProcedureName = StoredProcedure.Name.PedidoProducto_INSERT.ToString();
        }

        public DataSet Get()
        {
            DataSet ds;

            PedidoProducto_Insert_Prm pedidoProducto_Insert_Prm = new PedidoProducto_Insert_Prm(this.PedidoProducto);
            DataBaseHelper dbhelper = new DataBaseHelper(StoredProcedureName);
            ds = dbhelper.Run(base.ConnectionString, pedidoProducto_Insert_Prm.Parameters);

            return ds;
        }

        private PedidoProducto _pedidoProducto;

        public PedidoProducto PedidoProducto
        {
            get { return _pedidoProducto; }
            set { _pedidoProducto = value; }
        }
    }

    public class PedidoProducto_Insert_Prm
    {
        public PedidoProducto_Insert_Prm(PedidoProducto pedidoProducto)
        {
            this.PedidoProducto = pedidoProducto;
            this.BuildParams();
        }

        private void BuildParams()
        {
            SqlParameter[] parameters = 
            {
                new SqlParameter( "@idPedido"       , this.PedidoProducto.Pedido.IdPedido),
                new SqlParameter( "@idProducto"     , this.PedidoProducto.Producto.IdProducto),
                new SqlParameter( "@Cantidad"       , this.PedidoProducto.Cantidad),
                new SqlParameter( "@PrecioUnitario" , this.PedidoProducto.PrecioUnitario)
            };

            this.Parameters = parameters;
        }

        private PedidoProducto _pedidoProducto;

        public PedidoProducto PedidoProducto
        {
            get { return _pedidoProducto; }
            set { _pedidoProducto = value; }
        }

        private SqlParameter[] _parameters;

        public SqlParameter[] Parameters
        {
            get { return _parameters; }
            set { _parameters = value; }
        }
    }

    #endregion

    #endregion

    #region " UPDATE "

    #region " Pedido Update "
    public class Pedido_Update : DataAccessBase
    {
        public Pedido_Update()
        {
            base.StoredProcedureName = StoredProcedure.Name.Pedido_UPDATE.ToString();
        }

        public DataSet Get()
        {
            DataSet ds;

            Pedido_Update_Prm pedido_Update_Prm = new Pedido_Update_Prm(this.Pedido);
            DataBaseHelper dbhelper = new DataBaseHelper(StoredProcedureName);
            ds = dbhelper.Run(base.ConnectionString, pedido_Update_Prm.Parameters);

            return ds;
        }

        private Pedido _pedido;

        public Pedido Pedido
        {
            get { return _pedido; }
            set { _pedido = value; }
        }
    }

    public class Pedido_Update_Prm
    {
        public Pedido_Update_Prm(Pedido pedido)
        {
            this.Pedido = pedido;
            this.BuildParams();
        }

        private void BuildParams()
        {
            SqlParameter[] parameters = 
            {
                new SqlParameter( "@idPedido" , this.Pedido.IdPedido),
                new SqlParameter( "@idEstadoPedido" , this.Pedido.EstadoPedido.IdEstadoPedido),
                new SqlParameter( "@idMetodoPago" , this.Pedido.MetodoPago.IdMetodoPago),
                new SqlParameter( "@idMetodoEnvio" , this.Pedido.MetodoEnvio.IdMetodoEnvio),
                new SqlParameter( "@idTarjeta" , this.Pedido.Tarjeta.IdTarjeta),
                new SqlParameter( "@Direccion" , this.Pedido.Direccion),
                new SqlParameter( "@Ciudad" , this.Pedido.Ciudad),
                new SqlParameter( "@CodigoPostal" , this.Pedido.CodigoPostal),
                new SqlParameter( "@Provincia" , this.Pedido.Provincia),
                new SqlParameter( "@idPais" , this.Pedido.Pais.IdPais),
                new SqlParameter( "@idMoneda" , this.Pedido.Moneda.IdMoneda),
                new SqlParameter( "@TotalPedidoSinEnvio" , this.Pedido.TotalPedidoSinEnvio),
                new SqlParameter( "@TotalCostoEnvio" , this.Pedido.TotalCostoEnvio)
            };

            this.Parameters = parameters;
        }

        private Pedido _pedido;

        public Pedido Pedido
        {
            get { return _pedido; }
            set { _pedido = value; }
        }
        private SqlParameter[] _parameters;

        public SqlParameter[] Parameters
        {
            get { return _parameters; }
            set { _parameters = value; }
        }
    }
    #endregion

    #region " PedidoProducto Update "
    public class PedidoProducto_Update : DataAccessBase
    {
        public PedidoProducto_Update()
        {
            base.StoredProcedureName = StoredProcedure.Name.PedidoProducto_UPDATE.ToString();
        }

        public DataSet Get()
        {
            DataSet ds;

            PedidoProducto_Update_Prm pedidoProducto_Update_Prm = new PedidoProducto_Update_Prm(this.PedidoProducto);
            DataBaseHelper dbhelper = new DataBaseHelper(StoredProcedureName);
            ds = dbhelper.Run(base.ConnectionString, pedidoProducto_Update_Prm.Parameters);

            return ds;
        }

        private PedidoProducto _pedidoProducto;

        public PedidoProducto PedidoProducto
        {
            get { return _pedidoProducto; }
            set { _pedidoProducto = value; }
        }
    }

    public class PedidoProducto_Update_Prm
    {
        public PedidoProducto_Update_Prm(PedidoProducto pedidoProducto)
        {
            this.PedidoProducto = pedidoProducto;
            this.BuildParams();
        }

        private void BuildParams()
        {
            SqlParameter[] parameters = 
            {
                new SqlParameter( "@idPedido"       , this.PedidoProducto.Pedido.IdPedido),
                new SqlParameter( "@idProducto"     , this.PedidoProducto.Producto.IdProducto),
                new SqlParameter( "@Cantidad"       , this.PedidoProducto.Cantidad),
                new SqlParameter( "@PrecioUnitario" , this.PedidoProducto.PrecioUnitario)
            };

            this.Parameters = parameters;
        }

        private PedidoProducto _pedidoProducto;

        public PedidoProducto PedidoProducto
        {
            get { return _pedidoProducto; }
            set { _pedidoProducto = value; }
        }

        private SqlParameter[] _parameters;

        public SqlParameter[] Parameters
        {
            get { return _parameters; }
            set { _parameters = value; }
        }
    }
    #endregion

    #endregion
}
